#include "BlockQueue.hpp"

void *producer(void *args)
{
    BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(args);
    while (true)
    {
        // 生产者进行生产
        int data = rand() % 10 + 1; // 使用随机数构建数据
        bq->push(data);
        std::cout << "生产数据->" << data << std::endl;
        sleep(1);
    }
    return nullptr;
}

void *consumer(void *args)
{
    BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(args);
    while (true)
    {
        // 消费者进行消费
        int data;
        bq->pop(&data);
        std::cout << "消费数据->" << data << std::endl;
    }
    return nullptr;
}

int main()
{
    srand((unsigned int)time(0) ^ getpid());
    BlockQueue<int> *bq = new BlockQueue<int>;
    pthread_t p, c; // 生产者，消费者线程,通过创建线程的第四个参数看到同一个BQ
    pthread_create(&c, nullptr, consumer, (void *)bq);
    pthread_create(&p, nullptr, producer, (void *)bq);

    pthread_join(c, nullptr);
    pthread_join(p, nullptr);
    delete bq;
    bq = nullptr;
    return 0;
}